#ifndef __MESSAGE_QUEUE_H__
#define __MESSAGE_QUEUE_H__
#include <queue>
#include <mutex>
#include <condition_variable>
#include <iostream>

template <typename T>
class MessageQueue {
private:
    std::queue<T> queue;
    mutable std::mutex mutex;
    std::condition_variable cond_var;

public:
    // 入队操作
    void enqueue(T value) {
        std::lock_guard<std::mutex> lock(mutex);
        queue.push(std::move(value));
        cond_var.notify_one(); // 通知一个等待的线程
    }

    // 出队操作
    T dequeue() {
        std::unique_lock<std::mutex> lock(mutex);
        cond_var.wait(lock, [this] { return !queue.empty(); }); // 如果队列为空，则等待
        T value = std::move(queue.front());
        queue.pop();
        return value;
    }

    // 检查队列是否为空
    bool empty() const {
        std::lock_guard<std::mutex> lock(mutex);
        return queue.empty();
    }

    // 获取队列大小
    size_t size() const {
        std::lock_guard<std::mutex> lock(mutex);
        return queue.size();
    }
};


#endif